package com.cencat.merchant.service;

import com.cencat.common.utils.PageUtils.PageResult;
import com.cencat.merchant.dto.DispatchCreateDTO;
import com.cencat.merchant.dto.DispatchQueryDTO;
import com.cencat.merchant.entity.DispatchRecordEntity;
import com.cencat.merchant.vo.DispatchRecordVO;
import com.cencat.merchant.vo.DispatchStatisticsVO;

/**
 * 派单记录服务接口
 * 
 * @author cencat
 * @since 2024
 */
public interface DispatchRecordService {
    
    /**
     * 创建派单记录
     * 
     * @param createDTO 创建DTO
     * @return 派单记录实体
     */
    DispatchRecordEntity createDispatch(DispatchCreateDTO createDTO);
    
    /**
     * 手动派单
     * 
     * @param orderId 订单ID
     * @param driverId 司机ID
     * @param remark 备注
     * @return 派单记录实体
     */
    DispatchRecordEntity manualDispatch(Long orderId, Long driverId, String remark);
    
    /**
     * 司机接单
     * 
     * @param recordId 记录ID
     * @param driverId 司机ID
     * @return 是否成功
     */
    boolean acceptDispatch(Long recordId, Long driverId);
    
    /**
     * 司机拒单
     * 
     * @param recordId 记录ID
     * @param driverId 司机ID
     * @param rejectReason 拒绝原因
     * @return 是否成功
     */
    boolean rejectDispatch(Long recordId, Long driverId, String rejectReason);
    
    /**
     * 分页查询派单记录
     * 
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResult<DispatchRecordVO> queryDispatchRecords(DispatchQueryDTO queryDTO);
    
    /**
     * 根据ID获取派单记录详情
     * 
     * @param recordId 记录ID
     * @return 派单记录VO
     */
    DispatchRecordVO getDispatchRecordById(Long recordId);
    
    /**
     * 获取派单统计信息
     * 
     * @param tenantId 租户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计信息
     */
    DispatchStatisticsVO getDispatchStatistics(Long tenantId, String startDate, String endDate);
    
    /**
     * 实体转VO
     * 
     * @param entity 实体
     * @return VO
     */
    DispatchRecordVO convertToVO(DispatchRecordEntity entity);
}